﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using vudu.Logica.Clases;
using vudu.EnlaceDatos.SqlServer;

namespace vudu.Pruebas
{
    [TestFixture]
    public class PruebaPractica
    {
        private SqlServerPractica sql;
        private HorarioDeClase horarioDeClase;
        private List<HorarioDeClase> listaHorarioDeClase;
        private List<Salon> salonNoDisponible; 
        private List<Salon> salonesTotal;
        private Practica practica;
        private Salon salon;

        [SetUp]
        public void Init()
        {
            sql = new SqlServerPractica();
            horarioDeClase = new HorarioDeClase();
            listaHorarioDeClase= new List<HorarioDeClase>();
            salonesTotal = new List<Salon>();
            salonNoDisponible = new List<Salon>();
            practica = new Practica();
            
            
        }


        [Test]
        public void PruebaConsultarProfesorIndividual()
        {
            int cedula = 4097234;
            string nombre = "Nelson";
            String apellido = "Rodriguez";
            Assert.AreEqual(sql.ConsultarProfesorIndividual(cedula).Nombre,nombre);
            Assert.AreEqual(sql.ConsultarProfesorIndividual(cedula).Apellido, apellido);

        }

        [Test]
        public void PruebaListaDeSalonesOcupados()
        {
            horarioDeClase.HoraFin = DateTime.Parse("14:00");
            horarioDeClase.HoraInicio = DateTime.Parse("12:00");
            horarioDeClase.SalonDeClase = new Salon();
            horarioDeClase.SalonDeClase.NumeroSalon = 1;
            listaHorarioDeClase.Add(horarioDeClase);
            Assert.AreEqual(horarioDeClase.listaSalonesOcupados(12,14,listaHorarioDeClase)[0].NumeroSalon , 1);
            

        }


        [Test]
        public void PruebaAgregarPractica()
        {
            sql = new SqlServerPractica();
            salonesTotal= new List<Salon>();
            practica.NombrePractica="Practica de Prueba";
            practica.NumeroSeccion= 100;
            practica.profesor = new Profesor();
            practica.profesor.Cedula=4097234;
            listaHorarioDeClase = new List<HorarioDeClase>();
            horarioDeClase = new HorarioDeClase();
            horarioDeClase.HoraInicio = DateTime.Parse("10:00");
            horarioDeClase.HoraFin = DateTime.Parse("12:00");
            horarioDeClase.Dia = "Lunes";
            listaHorarioDeClase.Add(horarioDeClase);
            salon = new Salon();
            salon.NumeroSalon = 1;
            salonesTotal.Add(salon);
            practica.CrearPractica(practica,1, listaHorarioDeClase, salonesTotal);
            practica = new Practica();
            practica = sql.ConsultarDatosPractica(sql.UltimoIdPractica());
            listaHorarioDeClase = new List<HorarioDeClase>();
            listaHorarioDeClase = sql.ConsultarHorasPracticas(sql.UltimoIdPractica());
            Assert.AreEqual(practica.NombrePractica, "Practica de Prueba");
            Assert.AreEqual(practica.NumeroSeccion, 100);
            Assert.AreEqual(practica.profesor.Nombre, "Nelson");
            Assert.AreEqual(practica.profesor.Apellido, "Rodriguez");
            Assert.AreEqual(listaHorarioDeClase[0].Dia, "Lunes");
            Assert.AreEqual(listaHorarioDeClase[0].HoraInicio, DateTime.Parse("10:00"));
            Assert.AreEqual(listaHorarioDeClase[0].HoraFin, DateTime.Parse("12:00"));
            Assert.AreEqual(listaHorarioDeClase[0].SalonDeClase.Nombre, "L2312");
        }


        [Test]
        public void PruebaSalonesDisponibles()
        {
            for (int i = 0; i < 3; i++)
            {
                salon = new Salon();
                salon.NumeroSalon = i+1;
                salonesTotal.Add(salon);
            }
            salon = new Salon();
            salon.NumeroSalon = 2;
            salonNoDisponible.Add(salon);
            Assert.AreEqual(horarioDeClase.CompararSalones(salonNoDisponible, salonesTotal)[0].NumeroSalon, 1);
            Assert.AreEqual(horarioDeClase.CompararSalones(salonNoDisponible, salonesTotal)[1].NumeroSalon, 3);

        }

        [Test]
        public void PruebaConsultarPractica()
        {
             practica = new Practica();
             practica = sql.ConsultarDatosPractica(1);
             List<HorarioDeClase> listaHorasPractica = new List<HorarioDeClase>();
             listaHorasPractica = sql.ConsultarHorasPracticas(1);
            Assert.AreEqual(practica.NombrePractica,"Practica Evaluacion de Sistemas Informaticos");
            Assert.AreEqual(practica.profesor.Nombre,"Nelson");
            Assert.AreEqual(practica.profesor.Apellido,"Rodriguez");
            Assert.AreEqual(listaHorasPractica[0].HoraInicio.Hour,7);
            Assert.AreEqual(listaHorasPractica[0].HoraFin.Hour,9);
            Assert.AreEqual(listaHorasPractica[0].SalonDeClase.Nombre,"L1205");
            Assert.AreEqual(listaHorasPractica[0].SalonDeClase.Tipo, "Audiovisual");

            
        }

        [Test]

        public void pruebaConsultarSalones()
        {
            salonesTotal = new List<Salon>();
            salonesTotal = sql.ConsultarSalones(1);
            Assert.AreEqual(salonesTotal[0].NumeroSalon,1);
            Assert.AreEqual(salonesTotal[1].NumeroSalon,2);

        }

        [Test]
        public void pruebaModificarProfesor()
        {
            sql.ModificarProfesor(6789000,1);
            Assert.AreEqual(sql.ConsultarDatosPractica(1).profesor.Nombre, "Lucia");
            Assert.AreEqual(sql.ConsultarDatosPractica(1).profesor.Apellido, "Cardoso");
        }

        [Test]

        public void pruebaModificarSalon()
        {
            Practica practica=new Practica();
            practica.ModificarSalonPractica(1,"Viernes","4");
            Assert.AreEqual(sql.ConsultarHorasPracticas(1)[0].SalonDeClase.Nombre,"EC125");
            Assert.AreEqual(sql.ConsultarHorasPracticas(1)[0].SalonDeClase.Tipo,"Salon");
        }

        [Test]
        public void pruebaEliminarPractica()
        {
            sql.EliminarPractica(2);
            Practica practica = new Practica();
            practica = sql.ConsultarDatosPractica(2);
            Assert.AreNotEqual(practica.NombrePractica,"Practica Arquitectura de Computadores");
        }

        [Test]
        public void pruebaModificarHorarioPractica()
        {
            DateTime horaInicio = DateTime.Parse("8:00");
            DateTime horaFin = DateTime.Parse("10:00");
            bool verficacionModificacion = sql.ModificarHorarioPractica(horaInicio, horaFin, "Miercoles", 2);
            Assert.IsTrue(verficacionModificacion);
            listaHorarioDeClase = sql.ConsultarHorasPracticas(2);
            Assert.AreEqual(listaHorarioDeClase[0].Dia, "Miercoles");
            Assert.AreEqual(listaHorarioDeClase[0].HoraInicio, horaInicio);
            Assert.AreEqual(listaHorarioDeClase[0].HoraFin, horaFin);
        }

       }
}